package com.cskaoyan.javase.oop2._1extends._0introduction;

/**
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 人类：有姓名属性，以及吃饭这个行为
 * 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *
 * 很明显，像成员变量name，方法eat等都是被重复定义的成员。
 * 既然有重复，那就想复用它们，
 * 现在的需求是：复用类的成员。
 * 怎么做呢？
 * Java中对代码的直接复用依赖于某一个方法，而想要复用类的成员，就必须使用Java中的继承语法。
 *
 * 继承的语法:
 * Java在定义一个类时，可以显式地，直接让它继承另一个类，这就是Java的继承机制，其语法是：
 *
 * [访问权限修饰符] class 类名 extends 被继承的类/已经存在的某个类{
 *     // 类体
 * }
 * 解释:
 *      1.继承写在定义类的语法中
 *      2.extends关键字表示继承
 *      3.被继承的类/已经存在的某个类,我们称之为"父类"
 *      4.继承"父类"的是"子类"
 *      5.子类继承父类,会得到父类中的所有成员(普通成员,不包括静态成员,更不包括构造器)
 *      6.子类继承父类,说的更清楚一点,应该是子类"扩展"
 *了父类,因为子类在得到父类成员的基础上,还可以自己新增自定义成员,这叫子类"扩展"了父类
 *
 * @since 14:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        System.out.println(t.name);
        t.eat();

        Student s = new Student();
        s.eat();
        System.out.println(s.name);
    }
}

class Person {
    String name;

    public void eat() {
        System.out.println("吃饭是最重要的事情!");
    }
}

class Student extends Person {
    int stuId;
    // String name;

    // public void eat() {
    //     System.out.println("吃饭是最重要的事情!");
    // }

    public void study() {
        System.out.println("除了吃饭,学习最重要!");
    }
}

class Teacher extends Person{
    // String name;
    int teacherId;

    // public void eat() {
    //     System.out.println("吃饭是最重要的事情!");
    // }

    public void teach() {
        System.out.println("除了吃饭,上课最重要!");
    }
}